Javascript
的 eval
函数可以在当前作用域执行一段包含 Javascript
代码的字符串。
var foo = 1;
function test() {
var foo = 2;
eval('foo = 3');
return foo;
}
test(); // 3
foo; // 1
然而,eval
函数只有在当前作用域中直接被调用并且被调用的函数名为 eval
才会被执行。
var foo = 1;
function test() {
var foo = 2;
var bar = eval;
bar('foo = 3');
return foo;
}
test(); // 2
foo; // 3
eval
函数的使用应该被避免,99.9%
使用 eval
函数所实现的功能都可以通过不使用 eval
函数来实现。
伪装的 eval 函数
定时函数 setTimeout
和 setInterval
函数都可以接受字符串作为自己的第一个参数。在全局作用域下,这个字符串会一直被执行,在这个情形下我们并没有直接调用 eval
函数,也可以执行字符串。
安全问题
eval
函数毫无疑问将会造成安全问题,因为它会执行任何传给它的字符串,所以永远不要对未知或未信任源传来的字符串使用 eval
函数。
总结
eval
函数应该尽可能地避免使用。任何使用 eval
函数的代码都应该被质疑。我觉得 @justjavac 前辈在 《js中eval()函数的用处?》 问题中的回答总结的很好,那就是“学习 eval
函数,并远离 eval
函数”。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。